package com._520it.array;

import java.util.Arrays;

//球员列表
public class PlayerList {
	//存储场上球员球衣号码
	private static Integer[] players = null;
	//场上球员个数
	private static int size = 0;
	
	//1):初始化容量为5的线性列表 准备存储场上的5个球衣号码
	public static void init(int initialCapacity) {
		if(initialCapacity < 0) {
			throw new IllegalAccessError("容量不能为负数");
		}
		players = new Integer[initialCapacity];
	}
	//2):安排5个球员上场 （11，22，33，44，55）
	public static void add(Integer playerNum) {
		//判断和扩容
		if( size == players.length) {
			Integer[] temp = Arrays.copyOf(players, players.length * 2);
			players = temp;
		}
		players[size] = playerNum;
		size++;
	}
	//3):查询指定位置的球员的球衣号是多少，查询索引位置为2 的球衣号是 33
	public static Integer get(int index) {
		// TODO Auto-generated method stub
		if(index < 0 || index >=size) {
			throw new IllegalAccessError("索引越界");
		}
		return players[index];
	}

	//4):根据球衣号查询该球员在场上的索引位置，44球衣号的球员在场上的索引位置为 3
	public static int getIndexByPlayerNum(Integer playerNum) {
		// TODO Auto-generated method stub
		for (int index = 0; index < size; index++) {
			if(players[index].equals(playerNum)) {
				return index;
			}
		}
		
		return -1;
	}
	//5):替换场上索引为2 的球员，替换之后该位置的球衣编号为333 333 把 33 替换了
	public static void set(int index, Integer newPlayerNum) {
		// TODO Auto-generated method stub
		if(index < 0 || index >=size) {
			throw new IllegalAccessError("索引越界");
		}
		players[index] = newPlayerNum;
	}
	//6):替换球衣22 的球员，替换之后 为 222
	public static void update(Integer oldPlayerNum,Integer newPlayerNum) {
		int index = getIndexByPlayerNum(oldPlayerNum);
		if(index > 0) {
			set(index,newPlayerNum);
		}
	}
	//7):把场上索引位置为2 的球员罚下场，（注意：罚下，没有补位）
	public static void delete(int index) {
		// TODO Auto-generated method stub
		if(index < 0 || index >=size) {
			throw new IllegalAccessError("索引越界");
		}
		for (int i = 0; i < size -1; i++) {
			//index +1 位置移动到 index 位置
			players[i] = players[i+1];
		}
		//把最后一个位置设置为 null
		players[size-1] = null;
		//把场上球员总数减一
		size--;
		
	}
	
	
	
	//1):初始化容量为5的线性列表 准备存储场上的5个球衣号码
	//2):安排5个球员上场 （11，22，33，44，55）
	//3):查询指定位置的球员的球衣号是多少，查询索引位置为2 的球衣号是 33
	//4):根据球衣号查询该球员在场上的索引位置，44球衣号的球员在场上的索引位置为 3
	//5):替换场上索引为2 的球员，替换之后该位置的球衣编号为333 333 把 33 替换了
	//6):替换球衣22 的球员，替换之后 为 222
	//7):把场上索引位置为2 的球员罚下场，（注意：罚下，没有补位）
	
	//8 按照球员在场位置，打印球衣号码，打印风格：［11，22，33，44，55］
	public static void print() {
		if(players == null) {
			System.out.println("null");
			return ;
		}
		if(size == 0 ) {
			System.out.println("[]");
			return;
		}
		StringBuilder sb = new StringBuilder( size*2 + 1 );
		sb.append("[");
		for (int index = 0; index < size; index++) {
			sb.append(players[index]);
			if(index != size-1) {//判断是否最后一个元素
				sb.append(",");
			}else {
				sb.append("]");	
			}
			
		}
		System.out.println(sb.toString());
	}
}
